﻿using DevExpress.LookAndFeel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using DevExpress.XtraEditors;
using Sunisoft.IrisSkin;
using log4net;

namespace MesgessSystem
{
    static class Program
    {
        private static ILog _log = LogManager.GetLogger(typeof(SetsLoginFrm));
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            _log.Info("系统开始运行/System up and running......");
            //try
            //{
            //	Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);//处理未捕获的异常
            //	Application.ThreadException += Application_ThreadException;     //处理UI线程异常
            //	AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;  //处理非UI线程异常
            CommTool.ExceptionHandling.CatchGlobalException();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //// 启动  
            //SplashScreen.ShowSplashScreen();
            //// 进行自己的操作：加载组件，加载文件等等  
            //// 示例代码为休眠一会  
            //Thread.Sleep(3000);
            //if (SplashScreen.Instance != null)
            //{
            //    SplashScreen.Instance.BeginInvoke(new MethodInvoker(SplashScreen.Instance.Dispose));
            //    SplashScreen.Instance = null;
            //}
            //Application.Run(new SetsLoginFrm());
            #region 这是DEV样式
            //DevExpress.Skins.SkinManager.EnableFormSkins();
            //DevExpress.UserSkins.OfficeSkins.Register();
            //DevExpress.UserSkins.BonusSkins.Register();
            //UserLookAndFeel.Default.SetSkinStyle("DevExpress Style");
            #endregion
            #region 这是写死窗体皮肤样式（现在已经实现可切换皮肤）
            //string folder = AppDomain.CurrentDomain.BaseDirectory + "Skins";
            //string[] files = Directory.GetFiles(folder);
            //SkinEngine skinEngine = new SkinEngine();
            //skinEngine.SkinFile = AppDomain.CurrentDomain.BaseDirectory + @"Skins\MSN.ssk";
            //skinEngine.DisableTag = 9999;
            #endregion
            /*使程序只能启动一个*/
            //声明互斥体
            Mutex mutex = new Mutex(false, "ThisShouldOnlyRunOnce");
            //判断互斥体是否在使用中
            bool Runing = !mutex.WaitOne(0, false);       
            if (!Runing)
            {
                _log.Info("系统已经启动完成");
                _log.Info("The system has been started......");
                Application.Run(new SetsLoginFrm());
            }
            else
            {
                //XtraMessageBox.Show("已经有一个实例运行中！");
                MessageBox.Show("已经有一个实例运行中！");
            }
            //	}
            //	catch (Exception ex)
            //	{
            //		var strDateInfo = "出现应用程序未处理的异常：" + DateTime.Now + "\r\n";

            //		var str = string.Format(strDateInfo + "异常类型：{0}\r\n异常消息：{1}\r\n异常信息：{2}\r\n",ex.GetType().Name, ex.Message, ex.StackTrace);

            //		WriteLog(str);
            //		XtraMessageBox.Show("发生错误，请查看程序日志！错误日志路径在项目的product-Debug-ErrLog中", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            //		Environment.Exit(0);
            //	}			
            //}

            ///// <summary>
            ///// 错误信息
            ///// </summary>
            ///// <param name="sender"></param>
            ///// <param name="e"></param>
            //static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
            //{
            //	string str;
            //	var strDateInfo = "出现应用程序未处理的异常：" + DateTime.Now + "\r\n";
            //	var error = e.Exception;
            //	if (error != null)
            //	{
            //		str = string.Format(strDateInfo + "异常类型：{0}\r\n异常消息：{1}\r\n异常信息：{2}\r\n", error.GetType().Name, error.Message, error.StackTrace);
            //	}
            //	else
            //	{
            //		str = string.Format("应用程序线程错误：{0}",e);
            //	}
            //	WriteLog(str);
            //	XtraMessageBox.Show("发生错误，请查看程序日志！错误日志路径在项目的product-Debug-ErrLog中", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            //	Environment.Exit(0);
            //}

            //static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            //{
            //	var error = e.ExceptionObject as Exception;
            //	var strDateInfo = "出现应用程序未处理的异常：" + DateTime.Now + "\r\n";
            //	var str = error != null ? string.Format(strDateInfo + "Application UnhandledException:{0};\n\r堆栈信息:{1}", error.Message, error.StackTrace) : string.Format("Application UnhandledError:{0}", e);

            //	WriteLog(str);
            //	XtraMessageBox.Show("发生错误，请查看程序日志！错误日志路径在项目的product-Debug-ErrLog中", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            //	Environment.Exit(0);
            //}

            //static void WriteLog(string str)
            //{
            //	if (!Directory.Exists("ErrLog"))
            //	{
            //		Directory.CreateDirectory("ErrLog");
            //	}

            //	//using (var sw = new StreamWriter(@"..\product\Debug\ErrLog\ErrLog.txt", true))
            //	using (var sw = new StreamWriter(@"ErrLog\ErrLog.txt", true))
            //	{
            //		sw.WriteLine(str);
            //		sw.WriteLine("--------------------------------------------------------------------");
            //		sw.Close();
            //	}
            //}
        }
    }
}
